/*
 * ReferenceCounter.h
 *
 *  Created on: 2011/05/28
 *      Author: naoki
 */

#ifndef INCLUDED_NTENGINE_REFERENCECOUNTER_H
#define INCLUDED_NTENGINE_REFERENCECOUNTER_H

namespace NTEngine {

/*!
 * @brief 参照カウンタ型のベース
 */
class ReferenceCounter
{
public:
	/*!
	 * @brief カウントを1にしてコンストラクトします
	 */
	ReferenceCounter()
	: mReferenceCount( 1 )
	{ }

	/*!
	 * @brief 参照カウントをインクリメントします
	 */
	int refer() {
		return ++mReferenceCount;
	}

	/*!
	 * @brief 参照カウントをデクリメントします
	 */
	int unref() {
		return --mReferenceCount;
	}

	/**
	 * @brief 現在の参照カウントを取得します
	 */
	int referenceCount() const {
		return mReferenceCount;
	}

protected:
	~ReferenceCounter() { } //!< このクラスのインスタンスは生成させないため、protected

private:
	int mReferenceCount; //!< 参照カウンタ
};

} // namespace NTEngine

#endif // INCLUDED_NTENGINE_REFERENCECOUNTER_H
